package Sistem;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import org.omg.CORBA.StringSeqHelper;

import Adapter.HavalimaniAdapter;
import Adapter.KargoBiletAdapter;
import Adapter.KargoUcakAdapter;
import Adapter.KargoUcusAdapter;
import Adapter.PilotAdapter;
import Adapter.SeferAdapter;
import Adapter.YolcuBiletAdapter;
import Adapter.YolcuUcakAdapter;
import Adapter.YolcuUcusAdapter;
import DomainPackage.*;
import UIPackage.*;
import TechnicalServices.*;

public class Register {

	private SatisElemani satisElemani;
	private Pilot pilot;
	private Musteri musteri;
	private Ucak ucak;
	private YolcuUcak yolcuUcak;
	private KargoUcak kargoUcak;
	private Havalimani havalimani;
	private Sefer sefer;
	private KargoUcus kargoUcus;
	private YolcuUcus yolcuUcus;
	private Firma firma;
	private YolcuBilet yolcuBilet;
	private KargoBilet kargoBilet;

	

	
	public YolcuBilet getYolcuBilet() {
		return yolcuBilet;
	}


	public void setYolcuBilet(YolcuBilet yolcuBilet) {
		this.yolcuBilet = yolcuBilet;
	}


	public KargoBilet getKargoBilet() {
		return kargoBilet;
	}


	public void setKargoBilet(KargoBilet kargoBilet) {
		this.kargoBilet = kargoBilet;
	}


	public YolcuUcak getYolcuUcak() {
		return yolcuUcak;
	}


	public void setYolcuUcak(YolcuUcak yolcuUcak) {
		this.yolcuUcak = yolcuUcak;
	}


	public KargoUcak getKargoUcak() {
		return kargoUcak;
	}


	public void setKargoUcak(KargoUcak kargoUcak) {
		this.kargoUcak = kargoUcak;
	}


	public Firma getFirma() {
		return firma;
	}


	public void setFirma(Firma firma) {
		this.firma = firma;
	}

	public KargoUcus getKargoUcus() {
		return kargoUcus;
	}


	public void setKargoUcus(KargoUcus kargoUcus) {
		this.kargoUcus = kargoUcus;
	}


	public YolcuUcus getYolcuUcus() {
		return yolcuUcus;
	}


	public void setYolcuUcus(YolcuUcus yolcuUcus) {
		this.yolcuUcus = yolcuUcus;
	}


	public Sefer getSefer() {
		return sefer;
	}


	public void setSefer(Sefer sefer) {
		this.sefer = sefer;
	}


	public Havalimani getHavalimani() {
		return havalimani;
	}


	public void setHavalimani(Havalimani havalimani) {
		this.havalimani = havalimani;
	}


	public Ucak getUcak() {
		return ucak;
	}


	public void setUcak(Ucak ucak) {
		this.ucak = ucak;
	}


	public Musteri getMusteri() {
		return musteri;
	}


	public void setMusteri(Musteri musteri) {
		this.musteri = musteri;
	}


	public Pilot getPilot() {
		return pilot;
	}


	public void setPilot(Pilot pilot) {
		this.pilot = pilot;
	}


	public SatisElemani getSatisElemani() {
		return satisElemani;
	}
	
	public boolean satisElemaniGiris(int id){
		SatisElemani se;
		se = (SatisElemani)this.get(id, SatisElemani.class);
		if(se == null)
			return false;
		return true;
		
	}
	public Musteri musteriGetir(int yolcuKimlikNo){
		Musteri m;
		m = (Musteri) this.get(yolcuKimlikNo, Musteri.class);
			return m;
			
	}
	
	public boolean sistemYoneticisiGiris(int id){
		if (id == 42)
			return true;
		
		return false;
	}

	public void setSatisElemani(SatisElemani satisElemani) {
		this.satisElemani = satisElemani;
	}

	public void satisElemaniEklemeIsleminiBaslat(int elemanID){
		this.satisElemani=new SatisElemani(elemanID);
	}
	public void satisElemaniBilgiGir(String adi,String soyadi,GregorianCalendar dogumTarihi,int elemanID){
		this.getSatisElemani().satisElemaniBilgiGir(adi,soyadi,dogumTarihi,elemanID);
	}
	public void satisElemaniKayitIsleminiBitir(){
		this.put(getSatisElemani(),SatisElemani.class);
		
	}
	
	public void pilotEklemeIsleminiBaslat(int pilotID){
		this.pilot=new Pilot(pilotID);
	}
	public void pilotBilgiGir(String adi,String soyadi,GregorianCalendar dogumTarihi,int pilotID){
		this.getPilot().pilotBilgiGir(adi,soyadi,dogumTarihi,pilotID);
	}
	public void pilotKayitIsleminiBitir(){
		this.put(getPilot(), Pilot.class);
	}
	
	public void musteriEklemeIsleminiBaslat(int musteriID){
		this.musteri=new Musteri(musteriID);
	}
	public void musteriBilgiGir(String adi,String soyadi,GregorianCalendar dogumTarihi,int musteriID, int musteriTipi){
		this.getMusteri().musteriBilgiGir(adi,soyadi,dogumTarihi,musteriID, musteriTipi);
	}
	public void musteriKayitIsleminiBitir(){
		this.put(getMusteri(), Musteri.class);
	}
	
	public void ucakEklemeIsleminiBaslat(){
		this.ucak=new Ucak();
	}
	public void ucakTipiBelirleKargo(){
		this.kargoUcak=new KargoUcak();	
	}
	public void ucakTipiBelirleYolcu(){
		this.yolcuUcak=new YolcuUcak();	
	}
	public void yolcuUcakBilgiGir(float bagajKapasitesi,String ucakAdi,int ucakID,float menzil,float agirlik,int uzunluk,float maksimumHiz,int businessKoltukSayisi,int ekonomikKoltukSayisi){
		(this.getYolcuUcak()).ucakBilgiGir(bagajKapasitesi,ucakAdi,ucakID,menzil,agirlik,uzunluk,maksimumHiz,businessKoltukSayisi,ekonomikKoltukSayisi);
	}
	public void kargoUcakBilgiGir(float kargoKapasitesi,String ucakAdi,int ucakID,float menzil,float agirlik,int uzunluk,float maksimumHiz){
		(this.getKargoUcak()).ucakBilgiGir(kargoKapasitesi,ucakAdi,ucakID,menzil,agirlik,uzunluk,maksimumHiz);
	}
	public void yolcuUcakKayitIsleminiBitir(){
		this.put(getYolcuUcak(), YolcuUcak.class);
	}
	public void kargoUcakKayitIsleminiBitir(){
		this.put(getKargoUcak(), KargoUcak.class);
	}
	
	
	public void havalimaniEklemeIsleminiBaslat(){
		this.havalimani=new Havalimani();
	}
	public void havalimaniIdGir(int havalimaniID){
		this.havalimani=new Havalimani(havalimaniID);	
	}
	public void havalimaniBilgiGir(String havalimaniAdi,int havalimaniID,int pistSayisi,int ucusKapasitesi,int kuleSayisi){
		this.getHavalimani().havalimaniBilgiGir(havalimaniAdi,havalimaniID,pistSayisi,ucusKapasitesi,kuleSayisi);
	}
	public void havalimaniKayitIsleminiBitir(){
		this.put(this.getHavalimani(), Havalimani.class);
	}
	
	public void seferEklemeIsleminiBaslat(){
		this.sefer=new Sefer();
	}
	public void seferIdGir(int seferID){
		getSefer().setSeferID(seferID);	
	}
	public void seferHavalimaniGir(int kalkisID, int inisID){
		this.getSefer().setInisHavalimani((HavalimaniAdapter.getAllHavalimani().get(inisID)));
		this.getSefer().setKalkisHavalimani((HavalimaniAdapter.getAllHavalimani().get(kalkisID)));
	}
	public void seferBilgiGir(String seferAdi, float mesafe, float irtifa, float ucusSuresi){
		this.getSefer().setSeferAdi(seferAdi);
		this.getSefer().setMesafe(mesafe);
		this.getSefer().setIrtifa(irtifa);
		this.getSefer().setUcusSuresi(ucusSuresi);
	}
	public void seferKayitIsleminiBitir(){
		this.put(getSefer(), Sefer.class);
		
	}
	
	public boolean kargoBiletSatisIsleminiBaslat(int yolcuKimlikNo){
		
		Musteri m = this.musteriGetir(yolcuKimlikNo);
		if (m == null)
			return false;
		KargoBilet kb = new KargoBilet();
		kb.setMusteri(m);
		kb.setBiletID(KargoBiletAdapter.getAllKargoBilet().size()+1);
		this.setKargoBilet(kb);
		return true;
	}
	
	public void kargoTarihSec(GregorianCalendar tarih){
		this.getKargoBilet().setTarih(tarih);
		
	}
	public void kargoUcusSec(int ucusID){
		KargoUcus ucus = (KargoUcusAdapter.getAllKargoUcus().get(ucusID));
		this.getKargoBilet().setKargoUcus(ucus);
		
	}
	public void kargoAlanBelirle(float hacim){
		this.getKargoBilet().setHacim(hacim);
		
	}
	public void kargoSatisIsleminiBitir(){
		this.put(getKargoBilet(), KargoBilet.class);
	}
	
	public boolean yolcuBiletSatisIsleminiBaslat(int yolcuKimlikNo){
		Musteri m = this.musteriGetir(yolcuKimlikNo);
		if (m == null)
			return false;
		YolcuBilet yb = new YolcuBilet();
		yb.setMusteri(m);
		yb.setBiletID(YolcuBiletAdapter.getAllYolcuBilet().size()+1);
		this.setYolcuBilet(yb);
		return true;
	}
	
	public void yolcuTarihSec(GregorianCalendar tarih){
		this.getYolcuBilet().setTarih(tarih);	
	}

	public void yolcuUcusSec(int yolcuUcusID){
		YolcuUcus ucus = (YolcuUcusAdapter.getAllYolcuUcus().get(yolcuUcusID));
		this.getYolcuBilet().setUcus(ucus);
	}

	public void koltukVeBagajSec(int koltukID,float bagaj){
		Koltuk koltuk = this.getYolcuBilet().getUcus().koltukGetir(koltukID);
		this.getYolcuBilet().setKoltuk(koltuk);
		this.getYolcuBilet().setBagaj(bagaj);
	}

	public void yolcuSatisIsleminiBitir(){
		this.put(getYolcuBilet(), YolcuBilet.class);
		
	}
	
	public void kargoUcusEklemeIsleminiBaslat(){
		this.setKargoUcus(new KargoUcus());
	}
	public void kargoUcusIdSec(int ucusID){
		this.getKargoUcus().setUcusID(ucusID);
	}


	public void kargoSeferSec(int seferID){
		this.getKargoUcus().setSefer((SeferAdapter.getAllSefer().get(seferID)));

	}

	public void kargoUcusTarihSec(GregorianCalendar tarih){
		this.getKargoUcus().setUcusTarihi(tarih);
	}

	public void kargoUcaksec(int ucakID){
		this.getKargoUcus().setUcak((KargoUcakAdapter.getAllKargoUcak().get(ucakID)));
	}

	public void fiyatBelirle(float fiyat){
		this.getKargoUcus().setFiyat(fiyat);
	}

	public void kargoPilotBelirle(int pilotID){
		this.getKargoUcus().setPilot((PilotAdapter.getAllPilot().get(pilotID)));
	}

	public void kargoUcusKayitIsleminiBitir(){
		this.put(getKargoUcus(), KargoUcus.class);
		
	}
	
	public void yolcuUcusEklemeIsleminiBaslat(){
		this.setYolcuUcus(new YolcuUcus());
	}
	public void yolcuUcusIdSec(int ucusID){
		this.getYolcuUcus().setUcusID(ucusID);
	}

	public void yolcuSeferSec(int seferID){
		Sefer sefer = (SeferAdapter.getAllSefer().get(seferID));
		this.getYolcuUcus().setSefer(sefer);
	}

	public void yolcuUcusTarihSec(GregorianCalendar tarih){
		this.getYolcuUcus().setUcusTarihi(tarih);
	}

	public void yolcuUcaksec(int yolcuUcakID){
		YolcuUcak ucak = (YolcuUcakAdapter.getAllYolcuUcak().get(yolcuUcakID));
		this.getYolcuUcus().setYolcuUcak(ucak);
	}

	public void yolcuFiyatBelirle(float fiyat1, float fiyat2){
		for (Koltuk i:this.getYolcuUcus().getKoltuklar()){
			if (i.getClass().getName().equals("DomainPackage.UcusBusinessKoltuk"))
				i.setFiyat(fiyat1);
			else if(i.getClass().getName().equals("DomainPackage.UcusEkonomikKoltuk"))
				i.setFiyat(fiyat2);
		}
	}

	public void yolcuPilotBelirle(int pilotID){
		Pilot pilot = (PilotAdapter.getAllPilot().get(pilotID));
		this.getYolcuUcus().setPilot(pilot);
	}

	public void yolcuUcusKayitIsleminiBitir(){
		this.put(getYolcuUcus(), YolcuUcus.class);
		
	}

	public List<Integer> yolcuUcusIDListesiGetir() {
		List<Integer> ucusIDList = new ArrayList<Integer>();
		for (Ucus u: YolcuUcusAdapter.getAllYolcuUcus()){
			ucusIDList.add(new Integer(u.getUcusID()));
		}
		
		return ucusIDList;
	
	}
	
	public List<Integer> kargoUcusIDListesiGetir() {
		List<Integer> ucusIDList = new ArrayList<Integer>();
		for (Ucus u: KargoUcusAdapter.getAllKargoUcus()){
			ucusIDList.add(new Integer(u.getUcusID()));
		}
		
		return ucusIDList;
	
	}


	public int getSatisElemaniID() {
		return this.getSatisElemani().getElemanID();
	}


	public int getHavalimaniID() {
		return this.getHavalimani().getHavalimaniID();
	}


	public String getHavalimaniAdi() {
		return this.getHavalimani().getHavalimaniAdi();
	}


	public int getHavalimaniPistSayisi() {
		return this.getHavalimani().getPistSayisi();
	}


	public int getHavalimaniUcakKapasitesi() {
		return this.getHavalimani().getUcakKapasitesi();
	}


	public int getHavalimaniKuleSayisi() {
		return this.getHavalimani().getKuleSayisi();
	}


	public float getKargoBiletFiyat() {
		return this.getKargoBilet().getKargoUcus().getFiyat();
	}


	public float getKargoBiletIndirimMiktari() {
		return this.getKargoBilet().getMusteri().getIndirimMiktari();
	}


	public int getMusteriID() {
		return this.getMusteri().getMusteriID();
	}


	public String getMusteriAdi() {
		return this.getMusteri().getAdi();
	}


	public String getMusteriSoyadi() {
		return this.getMusteri().getSoyadi();
	}


	public int getMusteriTipi() {
		return this.getMusteri().getMusteriTipi();
	}


	public String getMusteriDogumTarihi() {
		return this.getMusteri().getDogumTarihi().get(GregorianCalendar.DAY_OF_MONTH)+"/"+this.getMusteri().getDogumTarihi().get(GregorianCalendar.MONTH)+"/"+this.getMusteri().getDogumTarihi().get(GregorianCalendar.YEAR);
	}


	public int getPilotID() {
		return this.getPilot().getPilotID();
	}


	public String getPilotAdi() {
		return this.getPilot().getAdi();
	}


	public String getPilotSoyadi() {
		return this.getPilot().getSoyadi();
	}


	public String getPilotDogumTarihi() {
		return this.getPilot().getDogumTarihi().get(GregorianCalendar.DAY_OF_MONTH)+"/"+this.getPilot().getDogumTarihi().get(GregorianCalendar.MONTH)+"/"+this.getPilot().getDogumTarihi().get(GregorianCalendar.YEAR);
	}


	public String getSatisElemaniAdi() {
		return this.getSatisElemani().getAdi();
	}


	public String getSatisElemaniSoyadi() {
		return this.getSatisElemani().getSoyadi();
	}


	public String getSatisElemaniDogumTarihi() {
		return this.getSatisElemani().getDogumTarihi().get(GregorianCalendar.DAY_OF_MONTH)+"/"+this.getSatisElemani().getDogumTarihi().get(GregorianCalendar.MONTH)+"/"+this.getSatisElemani().getDogumTarihi().get(GregorianCalendar.YEAR);
	}


	public int getSeferID() {
		return this.getSefer().getSeferID();
	}


	public String getSeferKalkisHavalimaniAdi() {
		
		return this.getSefer().getKalkisHavalimani().getHavalimaniAdi();
		
	}


	public String getSeferInisHavalimaniAdi() {
		return this.getSefer().getInisHavalimani().getHavalimaniAdi();
	}


	public List<String> getHavalimaniList() {
		List<String> havalimaniList = new ArrayList<String>();
		for (Havalimani h: HavalimaniAdapter.getAllHavalimani())
			havalimaniList.add(h.getHavalimaniAdi());
		
		return havalimaniList;
	}

	public List<String> ucusBilgileriniListele() {
		List<String> sl = new ArrayList<String>();
		int a = 0;
		for (YolcuUcus u : YolcuUcusAdapter.getAllYolcuUcus()){
			String s = "";
			System.out.println(u.getYolcuUcak().getUcakAdi());
			s += String.valueOf(u.getUcusID()) + ",";
			s += String.valueOf(u.getUcusTarihiDuzgun()) + ",";
			s += String.valueOf(u.getYolcuUcak().getUcakAdi()) + ",";
			s += String.valueOf(u.getPilot().getAdi()) + ",";
			s += String.valueOf(u.getYolcuUcak().getBagajKapasitesi()) + ",";
			s += String.valueOf(u.getFiyatList()) + ",";
			s += String.valueOf(u.getSefer().getSeferAdi());
			sl.add(s);
		}
		return sl;
	}
	

	public String getSeferAdi() {
		return this.getSefer().getSeferAdi();
	}


	public float getSeferMesafe() {
		return this.getSefer().getMesafe();
	}


	public float getSeferIrtifa() {
		return this.getSefer().getIrtifa();
	}


	public float getSeferUcusSuresi() {
		return this.getSefer().getUcusSuresi();
	}


	public String getKargoUcakAdi() {
		return this.getKargoUcak().getUcakAdi();
	}


	public int getKargoUcakID() {
		return this.getKargoUcak().getUcakID();
	}


	public float getKargoUcakAgirlik() {
		return this.getKargoUcak().getAgirlik();
	}


	public float getKargoUcakMenzil() {
		return this.getKargoUcak().getMenzil();
	}


	public float getKargoUcakMaksimumHiz() {
		return this.getKargoUcak().getMaksimumHiz();
	}


	public float getKargoUcakKargoKapasitesi() {
		return this.getKargoUcak().getKargoKapasitesi();
	}


	public float getKargoUcakUzunluk() {
		return this.getKargoUcak().getUzunluk();
	}


	public String getYolcuUcakAdi() {
		return this.getYolcuUcak().getUcakAdi();
	}


	public int getYolcuUcakID() {
		return this.getYolcuUcak().getUcakID();
	}


	public float getYolcuUcakAgirlik() {
		return this.getYolcuUcak().getAgirlik();
	}


	public float getYolcuUcakMenzil() {
		return this.getYolcuUcak().getMenzil();
	}


	public float getYolcuUcakMaksimumHiz() {
		return this.getYolcuUcak().getMaksimumHiz();
	}


	public float getYolcuUcakBagajKapasitesi() {
		return this.getYolcuUcak().getBagajKapasitesi();
	}


	public float getYolcuUcakUzunluk() {
		return this.getYolcuUcak().getUzunluk();
	}


	public int getYolcuUcakBusinessKoltukSayisi() {
		int businessKoltuk = 0;
		for (Koltuk k: (this.getYolcuUcak()).getKoltukListesi()){
			if (k.getClass().getName().equals("DomainPackage.BusinessKoltuk"))
				businessKoltuk++;
				
		}
		
		return businessKoltuk;
	}


	public int getYolcuUcakEkonomikKoltukSayisi() {
		int ekonomikKoltuk = 0;
		for (Koltuk k: (this.getYolcuUcak()).getKoltukListesi()){
			if (k.getClass().getName().equals("DomainPackage.EkonomikKoltuk"))
				ekonomikKoltuk++;
				
		}
		
		return ekonomikKoltuk;
	}


	public void kargoUcusHacimVeFiyatBelirle(Float hacim,Float fiyat) {
		this.getKargoUcus().setHacim(hacim);	
		this.getKargoUcus().setFiyat(fiyat);
	}


	public float getKargoUcusFiyat() {
		return this.getKargoUcus().getFiyat();
	}


	public int getKargoUcusID() {
		return this.getKargoUcus().getUcusID();
	}


	public String getKargoUcusPilotAdi() {
		return this.getKargoUcus().getPilot().getAdi();
	}


	public String getKargoUcusSeferAdi() {
		return this.getKargoUcus().getSefer().getSeferAdi();
	}


	public String getKargoUcusTarihi() {
		return this.getKargoUcus().getUcusTarihi().get(GregorianCalendar.DAY_OF_MONTH) + "/" + this.getKargoUcus().getUcusTarihi().get(GregorianCalendar.MONTH) + "/" + this.getKargoUcus().getUcusTarihi().get(GregorianCalendar.YEAR);
	}


	public String getKargoUcusUcakAdi() {
		return this.getKargoUcus().getUcak().getUcakAdi();
	}


	public List<String> getPilotList() {
		List<String> pilotList = new ArrayList<String>();
		for (Pilot p: PilotAdapter.getAllPilot())
			pilotList.add(p.getAdi());
		return pilotList;
	}


	public List<String> getSeferList() {
		List<String> seferList = new ArrayList<String>(); 
		for (Sefer s: SeferAdapter.getAllSefer())
			seferList.add(s.getSeferAdi());
		return seferList;
			
	}


	public List<String> getKargoUcakList() {
		List<String> kargoUcakList = new ArrayList<String>();
		for (KargoUcak ku: KargoUcakAdapter.getAllKargoUcak())
				kargoUcakList.add(ku.getUcakAdi());
		return kargoUcakList;
	}


	public List<String> getYolcuUcakList() {
		List<String> yolcuUcakList = new ArrayList<String>();
		for (YolcuUcak yu: YolcuUcakAdapter.getAllYolcuUcak())
			yolcuUcakList.add(yu.getUcakAdi());
		return yolcuUcakList;
	}


	public List<String> getYolcuBiletKoltukList() {
		List<String> yolcuBiletKoltukList = new ArrayList<String>(); 
		for (Koltuk k: this.getYolcuBilet().getUcus().getKoltuklar())
			yolcuBiletKoltukList.add(k.getKoltukNo());
		return yolcuBiletKoltukList;
	}


	public float getYolcuBiletFiyat() {
		return this.getYolcuBilet().getKoltuk().getFiyat();
	}


	public float getYolcuBiletIndirimMiktari() {
		return this.getYolcuBilet().getMusteri().getIndirimMiktari();
	}



	public String getYolcuUcusFiyat() {
		String retval = "";
		for (Float f: this.getYolcuUcus().getFiyatList())
			retval += f.toString() + ",";
		return retval;
	}


	public int getYolcuUcusID() {
		return this.getYolcuUcus().getUcusID();
	}


	public String getYolcuUcusPilotAdi() {
		return this.getYolcuUcus().getPilot().getAdi();
	}


	public String getYolcuUcusSeferAdi() {
		return this.getYolcuUcus().getSefer().getSeferAdi();
	}


	public String getYolcuUcusTarihi() {
		return this.getYolcuUcus().getUcusTarihi().get(GregorianCalendar.DAY_OF_MONTH) + "/" + this.getYolcuUcus().getUcusTarihi().get(GregorianCalendar.MONTH) + "/" + this.getYolcuUcus().getUcusTarihi().get(GregorianCalendar.YEAR);
	}


	public String getYolcuUcusUcakAdi() {
		return this.getYolcuUcus().getYolcuUcak().getUcakAdi();
	}
	
	public static void put(Object objectToStore, Object objectClass){
        Facade.getInstance().put(objectToStore, objectClass);
	}

	public static Object get(int ID, Object objectClass) {
        // used for feeding GUI elements with objects
        return Facade.getInstance().get(ID, objectClass);
	}
	
	public static List<Object> getAll(Object objectClass) {
        // used for feeding GUI elements with the all objects of given class
        return Facade.getInstance().getAll(objectClass);
	}

	

	public static void main(String[] args){
		Register r=new Register();
		r.setFirma(new Firma("THY", 1));
		
		
		AnasayfaGUI form=new AnasayfaGUI(r);
		form.show();
		
	}


	

	
}
